]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Cancel zoom of non-focused windows when leaving overview
authorFlorian Müllner <fmuellner@src.gnome.org>
Mon, 15 Feb 2010 22:11:09 +0000 (23:11 +0100)
committerFlorian Müllner <fmuellner@src.gnome.org>
Mon, 22 Feb 2010 22:41:09 +0000 (23:41 +0100)
When leaving the overview by hitting escape or super, all windows animate
to their original positions. Zoomed windows are kept above others until
the animation ends, then the focused window is brought to the front; as
this looks odd if the zoomed window does not have focus, cancel the zoom
in that case before leaving the overview.

https://bugzilla.gnome.org/show_bug.cgi?id=609243

js/ui/workspace.js

index cf75f05efd4124e52b91a8b3ed10bb5546539dcf..20da93102249715c072f1d4485c5cce0e548f3e4 100644 (file)
@@ -130,6 +130,7 @@ WindowClone.prototype = {
         this._inDrag = false;
 
         this._zooming = false;
+        this._selected = false;
     },
 
     setStackAbove: function (actor) {
@@ -144,6 +145,20 @@ WindowClone.prototype = {
         this.actor.destroy();
     },
 
+    zoomFromOverview: function() {
+        if (this._zooming) {
+            // If the user clicked on the zoomed window, or we are
+            // returning there anyways, then we can zoom right to the
+            // window, but if we are going to some other window, then
+            // we need to cancel the zoom before animating, or it
+            // will look funny.
+
+            if (!this._selected &&
+                this.metaWindow != global.screen.get_display().focus_window)
+                this._zoomEnd();
+        }
+    },
+
     _onDestroy: function() {
         if (this._zoomLightbox)
             this._zoomLightbox.destroy();
@@ -256,6 +271,7 @@ WindowClone.prototype = {
     },
 
     _onButtonRelease : function (actor, event) {
+        this._selected = true;
         this.emit('selected', event.get_time());
     },
 
@@ -1225,12 +1241,14 @@ Workspace.prototype = {
         this._hideAllOverlays();
 
         Main.overview.connect('hidden', Lang.bind(this,
-                                                 this._doneLeavingOverview));
+                                                  this._doneLeavingOverview));
 
         // Position and scale the windows.
         for (let i = 1; i < this._windows.length; i++) {
             let clone = this._windows[i];
 
+            clone.zoomFromOverview();
+
             if (clone.metaWindow.showing_on_its_workspace()) {
                 Tweener.addTween(clone.actor,
                                  { x: clone.origX,